const async = require('async')
// create a queue object with concurrency 2
var q = async.queue(function(task, callback) {
  // 模拟异步操作，例如网络请求或文件操作
  setTimeout(() => {
    // 模拟任务成功或失败
    if (Math.random() < 0.3) { // 30%的概率失败
      const error = new Error('任务失败: ' + task.name);
      callback(error,task);
    } else {
      console.log('成功处理任务: ' + task.name);
      callback(null,task);
    }
  }, 100);
}, 1);

q.drain(function() {
  console.log('所有任务已处理完毕');
});

// assign an error callback
q.error(function(err, task) {
  console.log('err:',err)
  console.log('task:',task)
  console.error('task experienced an error');
});

q.push({name: '1'}, function(err,task) {
  if(err){
    console.error('task failed', err);
  }
  console.log('task:',task)
});
q.push({name: '2'}, function(err,task) {
  if(err){
    console.error('task failed', err);
  }
});
q.push([{name: '3'},{name: 'bay'},{name: 'bax'}], function(err,task) {
  if(err){
    console.error('task failed', err);
  }
});

// // add some items to the front of the queue
// q.unshift({name: 'bar'}, function (err) {
//   console.log('finished processing bar');
// });
